package day8;

import org.junit.Test;



public class StringDemo {
	
	@Test
	public void test() {
		//"abc"直接双引号括起来的字符串叫常量字符串
		//如果常量池中有的话就直接使用，没有就在常量池中new一个字符串使用
		String str1 = "abc";
		//自己动手new的字符串是放到堆里面
		String str2 = new String("abc");
		//当发现在常量池中有这个字符串“abc"，就直接执行常量池中已有的字符串
		String str3 = "abc";
		//字符串双等号比较的是地址值
		System.out.println(str1 == str2);//false
		System.out.println(str2 == str3);//false
		System.out.println(str1 == str3);//true
		
	}
	@Test
	public void test01() {
		String str1 = new String("abc");
		String str2 = new String("Abc");
		System.out.println(str1.equals(str2));//false
		System.out.println(str1.equalsIgnoreCase(str2));
	}
	
	//String获取
	@Test
	public void test02() {
		String str = "JAVA AndroidA";
		System.out.println(str.length());
		char[] array = str.toCharArray();
		char ch = str.charAt(5);
		System.out.println(ch);//A
		System.out.println(str.indexOf('A'));
		//在此对象表示的字符序列中第一次出现该字符的索引；如果未出现该字符，则返回 -1。
		System.out.println(str.indexOf('x'));
		//public int indexOf(int ch,int fromIndex)
		System.out.println(str.indexOf('A', 4));//返回在此字符串中第一次出现指定字符处的索引，从指定的索引开始搜索
		//如果字符串参数作为一个子字符串在此对象中出现，则返回第一个这种子字符串的第一个字符的索引；如果它不作为一个子字符串出现，则返回 -1。

		System.out.println(str.indexOf("And"));
		//在此对象表示的字符序列中最后一次出现该字符的索引；如果未出现该字符，则返回 -1。
        System.out.println(str.lastIndexOf('A'));
        System.out.println(str.lastIndexOf('X'));
        System.out.println(str.lastIndexOf('A', 11));

       //如果字符串参数作为一个子字符串在此对象中出现一次或多次，则返回最后一个这种子字符串的第一个字符。如果它不作为一个子字符串出现，则返回 -1。

        System.out.println(str.lastIndexOf("And"));
		
		
	}
	
	
	//String判断
	@Test
	public void test3() {
		String str = "JAVA AndroidA";
		System.out.println(str.contains("And"));
		System.out.println(str.startsWith("JAV"));
		System.out.println(str.startsWith("nd", 6));
		System.out.println(str.startsWith("JA", 0));
		System.out.println(str.endsWith("idA"));
		System.out.println(str.isEmpty());
		System.out.println("".isEmpty());
		
	}
	
	
	//转换
	@Test
	public void test4() {
		
		String str = "Java And";
		char[] array = str.toCharArray();
		
		for(char c : array) {
			System.out.println(c);
		}
		
		String str2 = new String(array);
		System.out.println(str2);
	}
	
	//替换
	@Test
	public void test5() {
		String str = "Java And";
		//建立新的字符串。
		String newStr = str.replace('a', 'b');
		System.out.println(newStr);
		
	}
	
	//按照切割split
	@Test
	public void test6() {
		 String str = "java Android Python";
		 String[] array = str.split(" ");
		 for (String string : array) {
			 System.out.println(string);
		}
	}
	
	//获取字串/截取
	@Test
	public void test7() {
		String str = "java Android Python";
		//下标为begin开始截取
		//System.out.println(str.substring(6));
		//下标为beginIndex 截取到下标endIndex（不包括本身）：ndr
		//参数：
		//beginIndex - 起始索引（包括）。
		//endIndex - 结束索引（不包括）。 
		//返回：
		//指定的子字符串。 
		//抛出： 
		//IndexOutOfBoundsException - 如果 beginIndex 为负，或 endIndex 大于此 String 对象的长度，或 beginIndex 大于 endIndex。

		System.out.println(str.substring(6, 9));
	}
	
	
	@Test
	public void test8() {
		String str = "            java Androidython                                   ";
		char[] ch = str.toCharArray();
		System.out.println(ch.length);
		System.out.println(str.trim());
		
		
	}
	
	
	
	@Test
	public void test9() {
		String str1 = "abc";
		String str2 = new String("abc");
		StringBuffer stringBuffer = new StringBuffer(str1);
		System.out.println(stringBuffer);
	}
	@Test
	public void test10() {
		String str = "   JAVA Android  ";
		char[] array = str.toCharArray();
	 	for(int i = 0; i < array.length; i++) {
			if(array[i] == ' ') {
			   continue;
			}
			System.out.println(i);
			for(int j = array.length - 1; j >= 0; j--) {
				if(array[j] != ' ') {
					System.out.println(j);
					System.out.println(str.substring(i, j + 1));
					return;
				}	
			}
			
	 }
	}
	
	//
	@Test
	public void test11() {
		String str = "I Love Java !";
		char[] array = str.toCharArray();
		for(int i = 0; i < array.length; i++) {
			if (array[i] >= 'A' && array[i] <= 'Z') {
				array[i] += 32;
			}
			
		}
		String str2 = new String(array);
		System.out.println(str2);

	}
}
	
	


